package a27_GenericityUse.WhyGeneicity;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Author quan
 * @Description 为什么要使用泛型？
 * @Date 2023/3/15 16:06
 */
public class Genericity {
    public static void main(String[] args) {
        /**
         * 问题：在没有泛型的时候，我们是怎么在集合中添加数据的？
         */
        //(1)定义一个没有泛型的集合:此时默认存储的数据类型是Object类型
        ArrayList list = new ArrayList<>();
        //(2)在集合中添加数据：可以是任意的数据类型
        list.add(1);
        list.add("bbb");
        list.add(new Student("zhangSan",12));//自定义的类
        //(3)遍历集合,获取集合中的每一个元素——>使用迭代器的方式
        Iterator it = list.iterator();
        while (it.hasNext()){
//            Object obj = it.next();//获取当前数据并移动指针
            //多态的方式存在一个问题：就是不能使用子类的特有方法
            //比如：我要使用String的.length()方法是不可以的；如果要使用，则要进行数据的强转
//            obj.length();//报错
            String str = (String)it.next();
            str.length();
            System.out.println(str);
        }
        /**
         * 泛型的出现：。
         * 好处：进行数据类型的统一，就是在编译阶段进行数据类型的检查，其他的类型就会报错
         * 而且获取数据的时候因为是指定的类型，所以就不需要进行数据类型的强转。
         */
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<Animal> list2 = new ArrayList<>();
        list1.add("aaa");
//        list1.add(1);//添加其他类型的数据就会在编译阶段报错
        list2.add(new Animal());
        list2.add(new Cat());//泛型还可以添加自定义类型的子类

    }
}
